

using System.Data.Odbc;
using System;
using Gestion_Api.AccesoDatos;
using System.Data.SqlClient;
using System.Data;
namespace Escuela
{
    public class Curso : Cursable
    {
        private decimal matricula;
        #region getters y setters
        
        public decimal Matricula
        {
            get { return matricula; }
            set { matricula = value; }
        }

        #endregion



        public Curso buscarEnDB(string id)
        {

            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();
            //busco el cursable
            string query = "coop_cursable_GetOne '" + id.Trim() + "'";
            
            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            //Ejecuto query y lo cargo en un data reader
            SqlDataReader dr = ad.ExecuteReader(command);
            Curso curso = new Curso();
            int idmateria;
            //recorro data reader
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                     curso.Id = Convert.ToInt32(dr[0]);
                    curso.Costo = Convert.ToDecimal(dr[2]);
                    curso.Cupos = Convert.ToInt32(dr[3]);
                    curso.CuposLibres = Convert.ToInt32(dr[4]);
                    curso.Dia = dr[5].ToString();
                    curso.Aula = dr[6].ToString();
                    curso.HoraFin = dr[7].ToString();
                    curso.HoraInicio = dr[8].ToString();
                    curso.FechaFin = Convert.ToDateTime(dr[9]);
                    curso.FechaInicio = Convert.ToDateTime(dr[10]);
                    curso.Observacion = dr[11].ToString();

                    idmateria = Convert.ToInt32(dr[12]);
                    curso.materia = curso.Materia.buscarEnDB(idmateria);
                    //int idmateria = dr.GetInt32(11);
                    //curso.Materia.Nombre = dr.GetString(255);
                    //curso.Matricula = dr.GetInt32(0);
                    
                }

                //Cierro el data reader
                dr.Close();
                ad.DesConectar();

                //busco la materia
                //busco el curso
                query = "coop_curso_GetOne '" + id.Trim() + "'";

                //Ejecuto query y lo cargo en un data reader
                
                //dr = ad.ExecuteReader(query);

                //SqlCommand command = new SqlCommand();
                ////command.Connection = connection;
                command.CommandText = query;
                //command.CommandType = CommandType.Text;

                //Ejecuto query y lo cargo en un data reader
                dr = ad.ExecuteReader(command);

                while (dr.Read())
                {
                    curso.Matricula = Convert.ToDecimal(dr[1]);

                }
                //Cierro el data reader
                dr.Close();

                return curso;
            }
            else
            {
                //no encontre registros en la DB
                return null;
            }
        }

        public int agregarDB(Curso cu, int idMateria, Profesor pr)
        {
                        
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();

            //doy de alta el cursable
            //genero query
            string query = "coop_cursable_Insert";
            query += "'" + cu.Costo + "', ";
            query += "'" + cu.Cupos + "', ";
            query += "'" + cu.CuposLibres + "', ";
            query += "'" + cu.Dia + "', ";
            query += "'" + cu.Aula + "', ";
            query += "'" + cu.HoraFin + "', ";
            query += "'" + cu.HoraInicio + "', ";
            query += "'" + cu.FechaFin.ToString("yyyyMMdd")+ "', ";
            query += "'" + cu.FechaInicio.ToString("yyyyMMdd") + "', ";
            query += "'" + cu.Observacion + "', ";
            query += "'" + idMateria + "', ";
            query += "'" + pr.id + "'";

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            //agrego el cursable a la DB
            //int resp = ad.ejecQuery(query);

            int resp = ad.ejecQueryResp(command);

            ad.DesConectar();
            
            //obtengo el id del registro que ingrese
            int lastId = this.obtenerUltimoCurso();
            
           //doy de alta en curso el nuevo cursable
            query = "coop_curso_Insert";
            query += "'" + cu.matricula + "', ";
            query += "'" + lastId + "'";

            //resp = ad.ejecQuery(query);
            //reasigno texto
            command.CommandText = query;
            resp = ad.ejecQueryResp(command);



            ad.DesConectar();
            //Genero las clases del curso
            this.darAltaClases(cu.FechaInicio, cu.FechaFin, pr, lastId);

            return resp;

        }

        public int obtenerUltimoCurso()
        {
            //Genero la clase de conexion
            AccesoDB ad = new AccesoDB();
            //obtengo el id del registro que ingrese
            int id = 0;
            //SqlDataReader dr = ad.ExecuteReader("coop_cursable_ultimoID");

            SqlCommand command = new SqlCommand();
            //command.Connection = connection;
            command.CommandText = "coop_cursable_ultimoID";
            command.CommandType = CommandType.Text;

            //Ejecuto query y lo cargo en un data reader
            SqlDataReader dr = ad.ExecuteReader(command);

            while (dr.Read())
            {
                id = Convert.ToInt32(dr[0]);
            }
            dr.Close();
            //desconecto
            ad.DesConectar();

            return id;
        }

        public void darAltaClases(DateTime fInicio, DateTime fFin, Profesor pr, int cursoId)
        {
            //Agrego clases y sumo 7 dias hasta que llegue la clase fin
            while (fInicio <= fFin)
            {
                Clase cl = new Clase();
                cl.Fecha = fInicio;
                cl.Profesor1 = pr;
                cl.Observacion = "";


                cl.agregarDB(cl, cursoId);
                this.clases.Add(cl);

                fInicio = fInicio.AddDays(7);
            }
 
        }

        public bool delCursable(int idCursable)
        {
            Curso curso = this.buscarEnDB(Convert.ToString(idCursable));
            if (curso == null )
            {
                return false;
            }
            else
            {
                AccesoDB ad = new AccesoDB();

                //genero query
                string query = "coop_cursable_Delete ";
                query += "'" + idCursable + "'";


                SqlCommand command = new SqlCommand();
                //command.Connection = connection;
                command.CommandText = query;
                command.CommandType = CommandType.Text;

                int resp = ad.ejecQueryResp(command);
                return true;
            }
        }
    }
}
